﻿#region Header
// Copyright 2007-2011, Jerónimo Milea
// 
// This file is part of NetJsWire.
// 
//     NetJsWire is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     NetJsWire is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
// 
//     You should have received a copy of the GNU General Public License
//     along with NetJsWire.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System;
using System.Reflection;
using Newtonsoft.Json;

namespace NetJsWire.Direct.helper
{
    internal static class Utility
    {
        /// <summary>
        ///   Checks whether a type has a particular attribute.
        /// </summary>
        /// <param name = "t">The type.</param>
        /// <param name = "attribute">The attribute.</param>
        /// <returns>True if the type contains the attribute.</returns>
        internal static bool HasAttribute(Type t, Type attribute)
        {
            try
            {

                return t.GetCustomAttributes(attribute, true).Length > 0;
            }
            catch {
                // FIX """
                return false;
            }
            return true;
        }

        /// <summary>
        ///   Checks whether a method has a particular attribute.
        /// </summary>
        /// <param name = "t">The method.</param>
        /// <param name = "attribute">The attribute.</param>
        /// <returns>True if the method contains the attribute.</returns>
        internal static bool HasAttribute(MethodInfo mi, Type attribute)
        {
            return mi.GetCustomAttributes(attribute, true).Length > 0;
        }

        /// <summary>
        ///   Shortcut method to write a property value.
        /// </summary>
        /// <typeparam name = "T">The type of the value.</typeparam>
        /// <param name = "jw">The JSON writer.</param>
        /// <param name = "name">The name of the property.</param>
        /// <param name = "value">The value of the property.</param>
        internal static void WriteProperty<T>(JsonTextWriter jw, string name, T value)
        {
            jw.WritePropertyName(name);
            jw.WriteValue(value);
        }

    }
}
